gusucode.com > 耐品图片管理系统 标准版A > 耐品图片管理系统 标准版A/Admin_ClassOrderN.asp

    <!--#include file="Admin_ChkPurview.asp"-->
<%
'===============================================================
' 著作权号:中国国家版权局著作权登记号2004SR07385
' 版权所有:深圳市耐品科技开发有限公司 www.naipin.com
' 联系电话:0755-26611119 81234844 81234845
' 联系手机:13316911914
' 联系邮箱:naipin@naipin.com
'===============================================================

sub UpOrder()
	dim sqlOrder,rsOrder,MoveNum,ID,i
	dim ParentID,OrderID,ParentPath,Child,PrevID,NextID
	ID=Trim(request("ID"))
	MoveNum=trim(request("MoveNum"))
	if ID="" then
		FoundErr=true
		ErrMsg=ErrMsg & "<br><li>错误参数!</li>"
	else
		ID=CLng(ID)
	end if
	if MoveNum="" then
		FoundErr=true
		ErrMsg=ErrMsg & "<br><li>错误参数!</li>"
	else
		MoveNum=Cint(MoveNum)
		if MoveNum=0 then
			FoundErr=True
			ErrMsg=ErrMsg & "<br><li>请选择要提升的数字!</li>"
		end if
	end if
	if FoundErr=True then
		exit sub
	end if

	dim sql,rs,oldorders,ii,trs,tOrderID
	'要移动的分类信息
	set rs=conn.execute("select ParentID,OrderID,ParentPath,child,PrevID,NextID From NT_ClassName where ID="&ID)
	ParentID=rs(0)
	OrderID=rs(1)
	ParentPath=rs(2) & "," & ID
	child=rs(3)
	PrevID=rs(4)
	NextID=rs(5)
	rs.close
	set rs=nothing
	if child>0 then
		set rs=conn.execute("select count(*) From NT_ClassName where ParentPath like '%"&ParentPath&"%'")
		oldorders=rs(0)
		rs.close
		set rs=nothing
	else
		oldorders=0
	end if
	'先修改上一分类的NextID和下一分类的PrevID
	if PrevID>0 then
		conn.execute "update NT_ClassName set NextID=" & NextID & " where ID=" & PrevID
	end if
	if NextID>0 then
		conn.execute "update NT_ClassName set PrevID=" & PrevID & " where ID=" & NextID
	end if
	
	'和该分类同级且排序在其之上的分类------更新其排序,范围为要提升的数字
	sql="select ID,OrderID,child,ParentPath,PrevID,NextID From NT_ClassName where ParentID="&ParentID&" and OrderID<"&OrderID&" order by OrderID desc"
	set rs=server.CreateObject("adodb.recordset")
	rs.open sql,conn,1,3
	i=1
	do while not rs.eof
		tOrderID=rs(1)
		'conn.execute("update NT_ClassName set OrderID="&tOrderID+oldorders+i&" where ID="&rs(0))
		rs(1) = tOrderID+oldorders+i
		if rs(2)>0 then
			ii=i+1
			set trs=conn.execute("select ID,OrderID From NT_ClassName where ParentPath like '%"&rs(3)&","&rs(0)&"%' order by OrderID")
			if not (trs.eof and trs.bof) then
				do while not trs.eof
					if rs(0)&"" = trs(0)&"" then
						rs(1) = tOrderID+oldorders+ii
					else
						conn.execute("update NT_ClassName set OrderID="&tOrderID+oldorders+ii&" where ID="&trs(0))
					end if
					ii=ii+1
					trs.movenext
				loop
			end if
			trs.close
			set trs=nothing
		end if
		i=i+1
		if i>MoveNum then
			rs(4)=ID
			rs.update
			conn.execute("update NT_ClassName set NextID=" & rs(0) & " where ID=" & ID)		
			exit do
		end if
		rs.update
		rs.movenext
	loop
	rs.movenext
	if rs.eof then
		conn.execute("update NT_ClassName set PrevID=0 where ID=" & ID)
	else
		rs(5)=ID
		rs.update
		conn.execute("update NT_ClassName set PrevID=" & rs(0) & " where ID=" & ID)
	end if	
	rs.close
	set rs=nothing
	
	'更新所要排序的分类的序号
	conn.execute("update NT_ClassName set OrderID="&tOrderID&" where ID="&ID)
	'如果有下属分类,则更新其下属分类排序
	if child>0 then
		i=1
		set rs=conn.execute("select ID From NT_ClassName where ParentPath like '%"&ParentPath&"%' order by OrderID")
		do while not rs.eof
			conn.execute("update NT_ClassName set OrderID="&tOrderID+i&" where ID="&rs(0))
			i=i+1
			rs.movenext
		loop
		rs.close
		set rs=nothing
	end if
end sub

sub DownOrder()
	dim sqlOrder,rsOrder,MoveNum,ID,i
	dim ParentID,OrderID,ParentPath,Child,PrevID,NextID
	ID=Trim(request("ID"))
	MoveNum=trim(request("MoveNum"))
	if ID="" then
		FoundErr=true
		ErrMsg=ErrMsg & "<br><li>错误参数!</li>"
		exit sub
	else
		ID=Cint(ID)
	end if
	if MoveNum="" then
		FoundErr=true
		ErrMsg=ErrMsg & "<br><li>错误参数!</li>"
		exit sub
	else
		MoveNum=Cint(MoveNum)
		if MoveNum=0 then
			FoundErr=True
			ErrMsg=ErrMsg & "<br><li>请选择要下降的数字!</li>"
			exit sub
		end if
	end if

	dim sql,rs,oldorders,ii,trs,tOrderID
	'要移动的分类信息
	set rs=conn.execute("select ParentID,OrderID,ParentPath,child,PrevID,NextID From NT_ClassName where ID="&ID)
	ParentID=rs(0)
	OrderID=rs(1)
	ParentPath=rs(2) & "," & ID
	child=rs(3)
	PrevID=rs(4)
	NextID=rs(5)
	rs.close
	set rs=nothing

	'先修改上一分类的NextID和下一分类的PrevID
	if PrevID>0 then
		conn.execute "update NT_ClassName set NextID=" & NextID & " where ID=" & PrevID
	end if
	if NextID>0 then
		conn.execute "update NT_ClassName set PrevID=" & PrevID & " where ID=" & NextID
	end if
	
	'和该分类同级且排序在其之下的分类------更新其排序,范围为要下降的数字
	sql="select ID,OrderID,child,ParentPath,PrevID,NextID From NT_ClassName where ParentID="&ParentID&" and OrderID>"&OrderID&" order by OrderID"
	set rs=server.CreateObject("adodb.recordset")
	rs.open sql,conn,1,3
	i=0      '同级分类
	ii=0     '同级分类和子分类
	do while not rs.eof
		'conn.execute("update NT_ClassName set OrderID="&OrderID+ii&" where ID="&rs(0))
		rs(1) = OrderID+ii
		if rs(2)>0 then
			set trs=conn.execute("select ID,OrderID From NT_ClassName where ParentPath like '%"&rs(3)&","&rs(0)&"%' order by OrderID")
			if not (trs.eof and trs.bof) then
				do while not trs.eof
					ii=ii+1
					if rs(0)&""=trs(0)&"" then
						rs(1) = OrderID+ii
					else
						conn.execute("update NT_ClassName set OrderID="&OrderID+ii&" where ID="&trs(0))
					end if
					trs.movenext
				loop
			end if
			trs.close
			set trs=nothing
		end if
		ii=ii+1
		i=i+1
		if i>=MoveNum then
			rs(5)=ID
			rs.update
			conn.execute("update NT_ClassName set PrevID=" & rs(0) & " where ID=" & ID)		
			exit do
		end if
		rs.update
		rs.movenext
	loop
	rs.movenext
	if rs.eof then
		conn.execute("update NT_ClassName set NextID=0 where ID=" & ID)
	else
		rs(4)=ID
		rs.update
		conn.execute("update NT_ClassName set NextID=" & rs(0) & " where ID=" & ID)
	end if	
	rs.close
	set rs=nothing
	
	'更新所要排序的分类的序号
	conn.execute("update NT_ClassName set OrderID="&OrderID+ii&" where ID="&ID)
	'如果有下属分类,则更新其下属分类排序
	if child>0 then
		i=1
		set rs=conn.execute("select ID From NT_ClassName where ParentPath like '%"&ParentPath&"%' order by OrderID")
		do while not rs.eof
			conn.execute("update NT_ClassName set OrderID="&OrderID+ii+i&" where ID="&rs(0))
			i=i+1
			rs.movenext
		loop
		rs.close
		set rs=nothing
	end if
end sub
%>
<html>
<head>
<title>N级分类重新排序</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<%
Behind.WriteHtmlHead
Title="图 片 N 级 分 类 排 序"
Link="<a href='Admin_Class.asp' class='black'>管理分类</a> | <a href='Admin_ClassAdd.asp' class='black'>添加分类</a> | <a href='Admin_ClassOrder.asp' class='black'>分类排序</a>"
Behind.WriteHtmlTop Title,Link

dim Action
Action=trim(request("Action")) 
if Action="UpOrder" then 
	call UpOrder() 
elseif Action="DownOrder" then 
	call DownOrder() 
end if 
if FoundErr=True then 
	Behind.WriteErrMsg(ErrMsg) 
else 
	call main() 
end if 
 
sub main() 
	dim sqlClass,rsClass,i,iCount,trs,UpMoveNum,DownMoveNum 
	sqlClass="select * From NT_ClassName order by RootID,OrderID" 
	set rsClass=server.CreateObject("adodb.recordset") 
	rsClass.open sqlClass,conn,1,1 
%> 
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="1" class="border"> 
  <tr class="title">  
    <td colspan="4" align="center" class="tdbg1"><strong>N级分类重新排序</strong></td> 
  </tr> 
  <% 
do while not rsClass.eof 
%> 
    <tr class="tdbg" onMouseOut="this.style.backgroundColor=''" onMouseOver="this.style.backgroundColor='#EBEBEB'">  
      <td width="300"> 
	<%iDepth=rsClass("iDepth")
	rsChild=rsClass("Child")
	if iDepth>0 then
		if rsClass("NextID")>0 then
			for i=1 to iDepth-1
				response.write("<font color='#ECE597'>网j</font>")
			next
			response.write "<img src='images/tree_line1.gif' width='17' height='16' valign='abvmiddle'>" 
		else 
			for i=1 to iDepth-1
				response.write("<font color='#ECE597'>网j</font>")
			next
			response.write "<img src='images/tree_line2.gif' width='17' height='16' valign='abvmiddle'>" 
		end if 
	end if
	if rsChild>0 then 
	  	response.write "<img src='Images/tree_folder4.gif' width='15' height='15' valign='abvmiddle'>" 
	else 
	  	response.write "<img src='Images/tree_folder3.gif' width='15' height='15' valign='abvmiddle'>" 
	end if 
    response.write rsClass("ClassName")
	if rsChild>0 then 
	  	response.write "(" & rsChild & ")" 
	end if%></td> 
<% 
	if rsClass("ParentID")>0 then   '如果不是一级分类,则算出相同深度的分类数目,得到该分类在相同深度的分类中所处位置(之上或者之下的分类数) 
		'所能提升最大幅度应为For i=1 to 该版之上的版面数 
		set trs=conn.execute("select count(ID) From NT_ClassName where ParentID="&rsClass("ParentID")&" and OrderID<"&rsClass("OrderID")&"") 
		UpMoveNum=trs(0) 
		if isnull(UpMoveNum) then UpMoveNum=0 
		if UpMoveNum>0 then 
  			response.write "<form action='Admin_ClassOrderN.asp?Action=UpOrder' method='post'><td width='150'>" 
			response.write "<select name=MoveNum size=1><option value=0>向上移动</option>" 
			for i=1 to UpMoveNum 
				response.write "<option value="&i&">"&i&"</option>" 
			next 
			response.write "</select>" 
			response.write "<input type=hidden name=ID value="&rsClass("ID")&">&nbsp;<input type=submit name=Submit value=修改>" 
			response.write "</td></form>" 
		else 
			response.write "<td width='150'>&nbsp;</td>" 
		end if 
		trs.close 
		'所能降低最大幅度应为For i=1 to 该版之下的版面数 
		set trs=conn.execute("select count(ID) From NT_ClassName where ParentID="&rsClass("ParentID")&" and orderID>"&rsClass("orderID")&"") 
		DownMoveNum=trs(0) 
		if isnull(DownMoveNum) then DownMoveNum=0 
		if DownMoveNum>0 then 
  			response.write "<form action='Admin_ClassOrderN.asp?Action=DownOrder' method='post'><td width='150'>" 
			response.write "<select name=MoveNum size=1><option value=0>向下移动</option>" 
			for i=1 to DownMoveNum 
				response.write "<option value="&i&">"&i&"</option>" 
			next 
			response.write "</select>" 
			response.write "<input type=hidden name=ID value="&rsClass("ID")&">&nbsp;<input type=submit name=Submit value=修改>" 
			response.write "</td></form>" 
		else 
			response.write "<td width='150'>&nbsp;</td>" 
		end if 
		trs.close 
	else 
		response.write "<td colspan=2>&nbsp;</td>" 
	end if 
%> 
      <td>&nbsp;</td>
	</tr> 
  <% 
	UpMoveNum=0 
	DownMoveNum=0 
	rsClass.movenext 
loop 
%> 
</table> 
<% 
Behind.WriteHtmlEnd
rsClass.close 
set rsClass=nothing 
end sub 
%>